﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace GISCore.Geometry.Partition
{
    public interface ICellable
    {
        void setIntersectPoint(IEnumerable<IntersectPoint> points);
        void setPostPolygons(IEnumerable<PostPolygon> postPolys);
        //void setTopGridIntersectPoint(IEnumerable<GridIntersectPoint> points);
        //void setBottomGridIntersectPoint(IEnumerable<GridIntersectPoint> points);
        //void setLeftGridIntersectPoint(IEnumerable<GridIntersectPoint> points);
        //void setRightGridIntersectPoint(IEnumerable<GridIntersectPoint> points);
        void setGridIntersectPoint(IEnumerable<GridIntersectPoint> points,Line line);
        void setTopLinkedGridIntersectPoint(IEnumerable<LinkedPoint> points);
        void setBottomLinkedGridIntersectPoint(IEnumerable<LinkedPoint> points);
        void setLeftLinkedGridIntersectPoint(IEnumerable<LinkedPoint> points);
        void setRightLinkedGridIntersectPoint(IEnumerable<LinkedPoint> points);
        /* set neighbouring cell id */
        void setTopCell(int id);
        void setBottomCell(int id);
        void setLeftCell(int id);
        void setRightCell(int id);
        void addLine(Line l);

        IEnumerable<IntersectPoint> getIntersectPoint();
        IEnumerable<PostPolygon> getPostPolygons();
        IEnumerable<GridIntersectPoint> getTopGridIntersectPoint();
        IEnumerable<GridIntersectPoint> getBottomGridIntersectPoint();
        IEnumerable<GridIntersectPoint> getLeftGridIntersectPoint();
        IEnumerable<GridIntersectPoint> getRightGridIntersectPoint();
        IEnumerable<LinkedPoint> getTopLinkedGridIntersectPoint();
        IEnumerable<LinkedPoint> getBottomLinkedGridIntersectPoint();
        IEnumerable<LinkedPoint> getLeftLinkedGridIntersectPoint();
        IEnumerable<LinkedPoint> getRightLinkedGridIntersectPoint();
        IEnumerable<Line> getLines();
        int getTopCell();
        int getBottomCell();
        int getLeftCell();
        int getRightCell();

    }
}
